package com.lcc.book.demos.web.config;

import com.lcc.book.demos.web.Model.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.management.relation.RelationSupport;
@ResponseBody//返回的响应正文是数据的时候就需要加上该注解，不然会造成出错结果的提示并不是真正的出错原因
@ControllerAdvice
@Slf4j
public class ErrorHandler{
    @ExceptionHandler
    public Result exception(Exception e){
        log.error("发生异常：e:{}",e);
        return Result.fail("内部错误");
    }
    //还可以使异常更加详细
    @ExceptionHandler
    public Result exception(ArithmeticException e){
        log.error("发生异常,e:{}",e);
        return Result.fail("ArithmeticException 异常");
    }
    @ExceptionHandler
    public Result exception(NullPointerException e){
        log.error("发生异常,e:{}",e);
        return Result.fail("NullPointerException 异常");
    }
    //上面异常的执行顺序和书写顺序没关系，每次出现了异常只会先去找与之更加匹配的异常，比如出现NullPointerException异常，
    // 就直接找到处理该异常的方法，而不是直接使用public Result exception(Exception e)，只有找不到才使用public Result exception(Exception e）
}
